﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace Petaframe.DataAccess
{
    /// <summary>
    /// Tabloyu temsil eden sınıflara ait bilgileri tutar.
    /// </summary>
    internal class TableInfo 
    {       
        /// <summary>
        /// Class propertylerine ait bilgiler
        /// </summary>
        List<CustomPropertyInfo> _properties = new List<CustomPropertyInfo>();
       
    
        /// <summary>
        /// Primary key olarak işaretlenmiş propertyler
        /// </summary>
        List<CustomPropertyInfo> _primaryKeys = new List<CustomPropertyInfo>(2);

        public string TableName { get; set; }

        public bool HasPrimaryKey { get; set; }

        public string ClassName { get; set; }

        public List<CustomPropertyInfo> Properties
        {
            get
            {
                return _properties;
            }
        }

        /// <summary>
        /// Classtaki her propertye karşılık gelen parametre.Bu parametre içinde DbType ve parametre adı gibi bilgileri bulundurur.
        /// Parametreleri dictionary içinde tutmamızın sebebi , her property adına karşılık gelen parametreleri rahatlıkla bulabilmek içindir.  
        /// </summary>
    //    public IDictionary<string, ParameterInfo> Parameters { get { return _parameters; } }

        public List<CustomPropertyInfo> PrimaryKeys
        {
            get
            {
                return _primaryKeys;
            }
        }

        /// <summary>
        /// ilgili tabloya ait CRUD komutlarını oluşturur.
        /// </summary>
        public TableQueries TableSqlCommands { get; set; }


        public override  bool Equals(object other)
        {
            TableInfo ti = other as TableInfo;
            return this.TableName.Equals(ti.TableName)
                && this.HasPrimaryKey.Equals(ti.HasPrimaryKey)
                &&this.Properties.Count.Equals(ti.Properties.Count);
        }

        public override int GetHashCode()
        {
            return this.TableName.GetHashCode() ^ 212;
        }
    }
}
